DotNet Example: Complex Numbers

Description

This sample demonstrates using a Class file, and also loading, registering and using a .NET class from a DLL in the standard location. It also demonstrates using a constructor to load a value into a .NET class when it is created.

Xbasic lacks native support for complex arithmetic, but the .NET Framework has it. Now you can perform calculations with complex numbers from Alpha Anywhere, using the .NET System.Numerics.Complex class.

Create and save the class file Numerics.Complex:

dim Sv as DotNet::Services
dim assy as DotNet::AssemblyReference
assy.filename = DotNetPath()+"System.Numerics.dll"
Sv.RegisterClass("Numerics", "Complex", "System.Numerics.Complex", assy)

Once you DIM a variable as Numerics::Complex, you will be able to browse the .NET class interactively:

images/complex.png

Run the following interactive session:

dim cp as Numerics::Complex
dim cval as Numerics::Complex = new Numerics::Complex(1.0, -1.0)
?cval.ToString()
= "(1, -1)"

?Numerics::Complex.Abs(cval)
= 1.4142135623731

?cp.Abs(cval)
= 1.4142135623731

?cp.Acos(cval).ToString()
= "(0.904556894302381, 1.06127506190504)"

?cp.Multiply(cval,cval).ToString()
= "(0, -2)"

?cp.Add(cval,cval).ToString()
= "(2, -2)"
 
?cp.Conjugate(cval).ToString()
= "(1, 1)"

?cval.Real
= 1
 
?cval.Imaginary
= -1
 
?cp
= PUBLIC STATIC Abs AS N (value AS System::Numerics::Complex)  'Abs
PUBLIC STATIC Acos AS System::Numerics::Complex (value AS System::Numerics::Complex)  'Acos
PUBLIC STATIC Add AS System::Numerics::Complex (left AS System::Numerics::Complex, right AS System::Numerics::Complex)  'Add
PUBLIC STATIC Asin AS System::Numerics::Complex (value AS System::Numerics::Complex)  'Asin
PUBLIC STATIC Atan AS System::Numerics::Complex (value AS System::Numerics::Complex)  'Atan
PUBLIC Complex(real AS N, imaginary AS N)  'Public Constructor
PUBLIC STATIC Conjugate AS System::Numerics::Complex (value AS System::Numerics::Complex)  'Conjugate
PUBLIC STATIC Cos AS System::Numerics::Complex (value AS System::Numerics::Complex)  'Cos
PUBLIC STATIC Cosh AS System::Numerics::Complex (value AS System::Numerics::Complex)  'Cosh
PUBLIC STATIC Divide AS System::Numerics::Complex (dividend AS System::Numerics::Complex, divisor AS System::Numerics::Complex)  'Divide
PUBLIC Equals AS L (obj AS A)  'Equals
PUBLIC STATIC Exp AS System::Numerics::Complex (value AS System::Numerics::Complex)  'Exp
PUBLIC STATIC FromPolarCoordinates AS System::Numerics::Complex (magnitude AS N, phase AS N)  'FromPolarCoordinates
PUBLIC GetHashCode AS N ()  'GetHashCode
PUBLIC GetType AS System::Type ()  'GetType
PUBLIC STATIC Log AS System::Numerics::Complex (value AS System::Numerics::Complex)  'Log
PUBLIC STATIC Log10 AS System::Numerics::Complex (value AS System::Numerics::Complex)  'Log10
PUBLIC STATIC Multiply AS System::Numerics::Complex (left AS System::Numerics::Complex, right AS System::Numerics::Complex)  'Multiply
PUBLIC STATIC Negate AS System::Numerics::Complex (value AS System::Numerics::Complex)  'Negate
PUBLIC STATIC Pow AS System::Numerics::Complex (value AS System::Numerics::Complex, power AS N)  'Pow
PUBLIC STATIC Reciprocal AS System::Numerics::Complex (value AS System::Numerics::Complex)  'Reciprocal
PUBLIC STATIC ReferenceEquals AS L (objA AS A, objB AS A)  'ReferenceEquals
PUBLIC STATIC Sin AS System::Numerics::Complex (value AS System::Numerics::Complex)  'Sin
PUBLIC STATIC Sinh AS System::Numerics::Complex (value AS System::Numerics::Complex)  'Sinh
PUBLIC STATIC Sqrt AS System::Numerics::Complex (value AS System::Numerics::Complex)  'Sqrt
PUBLIC STATIC Subtract AS System::Numerics::Complex (left AS System::Numerics::Complex, right AS System::Numerics::Complex)  'Subtract
PUBLIC STATIC Tan AS System::Numerics::Complex (value AS System::Numerics::Complex)  'Tan
PUBLIC STATIC Tanh AS System::Numerics::Complex (value AS System::Numerics::Complex)  'Tanh
PUBLIC ToString AS C ()  'ToString
Imaginary = 0
+ImaginaryOne.
Magnitude = 0
+One.
Phase = 0
Real = 0
+Zero.

See Also